#ifndef PLAYER_H
#define PLAYER_H

#include <QObject>
#include "cards.h"

class Player : public QObject
{
    Q_OBJECT
public:
    enum Role{Lord, Farmer};    // 角色
    enum Sex{Man, Woman};       //性别
    enum Direction{Left, Right};    // 头像的显示方位
    enum Type{Robot, User, Unknow};// 玩家的类型
    explicit Player(QObject *parent = nullptr);
    explicit Player(QString name,QObject *parent = nullptr);

    // 名字
    void setName(QString name);
    QString getName();

    // 角色
    void setRole(Role role);
    Role getRole();

    // 性别
    void setSex(Sex sex);
    Sex getSex();

    // 方位
    void setDirection(Direction direction);
    Direction getDirection();

    // 玩家类型
    void setType(Type type);
    Type getType();

    // 玩家的分数
    void setScore(int score);
    int getScore();

    // 游戏结果
    void setWin(bool flag);
    bool isWin();

    // 提供当前对象的上家/下家对象
    void setPrevPlayer(Player *player);
    void setNextPlayer(Player *player);
    Player *getPrevPlayer();
    Player *getNextPlayer();

    // 叫地主/抢地主
    void grabLordBet(int point);

    // 存储扑克牌（发牌的时候得到的）
    void storeDispatchCard(Card &card);
    void storeDispatchCard(Cards &cards);

    // 得到所有的牌进行展示
    Cards getCards();

    // 清空玩家手中所有的牌
    void clearCards();

    // 玩家出牌
    void playHand(Cards &cards);

    // 设置 打出牌的玩家和打出的扑克牌是什么
    void setPendingInfo(Player *player, Cards &cards);
    Player *getPendPlayer();
    Cards getPendCards();

    // 虚函数
    virtual void prepareCallLord();     // 准备叫地主
    virtual void preparePlayHand();     // 准备出牌


signals:

protected:
    int m_score;
    QString m_name;
    Role m_role;
    Sex m_sex;
    Direction m_direction;
    Type m_type;
    bool m_iswin;
    Player *m_prev;
    Player *m_next;
    Cards m_cards;      // 存储玩家手中的扑克牌
    Cards m_pendCards;  // 打出的扑克牌
    Player *m_pendPlayer;   // 打出的扑克牌的所有者
};

#endif // PLAYER_H
